home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #5 & #6 / Amiga Plus CD - 1995 - No. 5 and 6.iso / tex / macros / eepic / eepic.sty-dist < prev    next >
Text File  |  1993-01-12  |  17KB  |  472 lines

  1. % eepic Version 1.1b < Febrary 7, 1988 >
  2. %    Written by Conrad Kwok
  3. %
  4. % Internet : kwok@iris.ucdavis.edu
  5. % csnet    : kwok@ucd.csnet
  6. % csnet    : kwok%iris.ucdavis.edu@csnet.relay
  7. % UUCP       : ...!ucbvax!ucdavis!iris!kwok
  8. %
  9. % The macros are in public domain.
  10. % You may distribute or modify it in any ways you like.
  11. % Please report any bugs, enhancements, comments, suggestions, etc.
  12. %
  13. % This style file modify some of the commands in epic[1] and LaTeX[2] such
  14. % that \special commands will be generated in drawing lines if approriate.
  15. % The \special commands generated is the subset of the \specials used
  16. % by tpic[3].
  17. %
  18. % [1] epic is written by Sunil Podar. Please read epic.sty for the
  19. %     copyright notice.
  20. % [2] LaTeX is written by Leslie Lamport. Please read the book LaTeX
  21. % [3] tpic is modified from pic by Tim Morgan
  22. %
  23. %% This file contains extensions of the following epic commands:
  24. %%    \dottedline    \dashline    \drawline
  25. %%    \jput
  26. %%
  27. %% It also contains extensions of the following LaTeX commands:
  28. %%    \circle        \line        \oval
  29. %%
  30. %% New commands include:
  31. %%    \Thicklines    \arc        \ellipse
  32. %%    \path        \spline        \allinethickness
  33. %%
  34. %% New commands for eepic 1.1
  35. %%    \blacken    \whiten        \shade
  36. %%    \texture    \filltype{type} type=black|white|shade
  37. %%
  38. %% For documentation, please see the accompanying manual
  39. %%
  40. %% Change Log;
  41. %% o    (October 2, 88)
  42. %%     Fixed the problem of \line (\@sline). When both x and y are
  43. %%     large, it produced 'bad character code' error.
  44. %%
  45. %% o    (January 17, 89)
  46. %%    Add commands \blacken, \whiten, \shade, \texture
  47. %%
  48. %% o    (January 17, 89)
  49. %%    Add \filltype{xxxxx}
  50. %%    xxxxx - black, white, shade
  51. %%
  52. \makeatletter
  53. \typeout{%
  54. Extension to Epic and LaTeX. Version 1.1b - Released Febrary 7, 1988}
  55. %
  56. \newcount\@gphlinewidth
  57. \newcount\@eepictcnt
  58. \newdimen\@tempdimc
  59. \@gphlinewidth\@wholewidth \divide\@gphlinewidth 4736
  60.  
  61. %% Redefine \thinlines, \thicklines
  62. %% See also latex.tex
  63. \def\thinlines{\let\@linefnt\tenln \let\@circlefnt\tencirc
  64.     \@wholewidth\fontdimen8\tenln \@halfwidth .5\@wholewidth
  65.     \@gphlinewidth\@wholewidth \divide\@gphlinewidth 4736\relax}
  66. \def\thicklines{\let\@linefnt\tenlnw \let\@circlefnt\tencircw
  67.     \@wholewidth\fontdimen8\tenlnw \@halfwidth .5\@wholewidth
  68.     \@gphlinewidth\@wholewidth \divide\@gphlinewidth 4736
  69.     \advance\@gphlinewidth\@ne   % Make the output looks better
  70.     \relax}
  71. %%
  72. %% To indicate whether the dot character is defined in the dotted join
  73. %%     environment or not (\@ifnodotdef)
  74. \newif\if@nodotdef \global\@nodotdeftrue
  75. %%
  76. %% Redefine \dottedjoin
  77. \def\dottedjoin{\global\@jointhemtrue \global\@joinkind=0\relax
  78.   \bgroup\@ifnextchar[{\global\@nodotdeffalse\@idottedjoin}%
  79.                       {\global\@nodotdeftrue\@idottedjoin[\@empty]}}
  80. %%----------------------------------------------------------------------
  81. %% Redefine \jput
  82. \long\def\jput(#1,#2)#3{\@killglue\raise#2\unitlength\hbox to \z@{\hskip
  83. #1\unitlength #3\hss}%
  84. \if@jointhem \if@firstpoint \gdef\x@one{#1} \gdef\y@one{#2} \global\@firstpointfalse
  85.  \else\ifcase\@joinkind
  86.     \if@nodotdef
  87.         \@spdottedline{\dotgap@join\unitlength}%
  88. (\x@one\unitlength ,\y@one\unitlength)(#1\unitlength,#2\unitlength)
  89.     \else
  90.     \@dottedline[\dotchar@join]{\dotgap@join\unitlength}%
  91. (\x@one\unitlength,\y@one\unitlength)(#1\unitlength,#2\unitlength)
  92.     \fi
  93.     \or\@dashline[\dashlinestretch]{\dashlen@join\unitlength}[\dotgap@join]%
  94. (\x@one,\y@one)(#1,#2)
  95.     \else\@drawline[\drawlinestretch](\x@one,\y@one)(#1,#2)\fi
  96.     \gdef\x@one{#1}\gdef\y@one{#2}%
  97.  \fi
  98. \fi\ignorespaces}
  99. %%
  100. %% Redefine \dottedline to generate special whenever possible.
  101. \def\dottedline{\@ifnextchar [{\@idottedline}{\@ispdottedline}}
  102. %% Similar to \@idottedline but it generate \special
  103. \def\@ispdottedline#1(#2,#3){\@ifnextchar (%
  104. {\@iispdottedline{#1}(#2,#3)}{\relax}}
  105. \def\@iispdottedline#1(#2,#3)(#4,#5){\@spdottedline{#1\unitlength}%
  106. (#2\unitlength,#3\unitlength)(#4\unitlength,#5\unitlength)%
  107. \@ispdottedline{#1}(#4,#5)}
  108. %
  109. \def\@spdottedline#1(#2,#3)(#4,#5){%
  110.     \@tempcnta \@gphlinewidth\relax
  111.     \advance\@tempcnta by 2     % solely for better output
  112.     \special{pn \the\@tempcnta}%
  113.     \@tempdimc=#2\relax
  114.     \@tempcnta \@tempdimc\relax \advance\@tempcnta 2368 \divide\@tempcnta 4736
  115.     \@tempdimc=#3\relax
  116.     \@tempcntb -\@tempdimc\relax\advance\@tempcntb -2368 \divide\@tempcntb 4736
  117.     \@paspecial{\the\@tempcnta}{\the\@tempcntb}%
  118.     \@tempdimc=#4\relax
  119.     \@tempcnta \@tempdimc\relax \advance\@tempcnta 2368 \divide\@tempcnta 4736
  120.     \@tempdimc=#5\relax
  121.     \@tempcntb -\@tempdimc\relax\advance\@tempcntb -2368 \divide\@tempcntb 4736
  122.     \@paspecial{\the\@tempcnta}{\the\@tempcntb}%
  123.     \@tempdimc=#1\relax
  124. %%
  125. %% Generate the pen width in terms of inch with 3 decimal digit.
  126.     \@tempcnta \@tempdimc\relax \advance\@tempcnta 2368 \divide\@tempcnta 4736
  127. %% \@tempcnta contain the pen width in terms of thousandth of a inch
  128. %% Then it is converted back to inch. I know the way I use is dumb but
  129. %% I cannot think of any better method
  130.     \@tempcntb \@tempcnta\relax \divide\@tempcntb 1000
  131.     \multiply \@tempcntb 1000 \advance\@tempcnta -\@tempcntb
  132.     \divide\@tempcntb 1000
  133.     \ifnum\@tempcnta < 10
  134.         \special{dt \the\@tempcntb.00\the\@tempcnta}%
  135.     \else\ifnum\@tempcnta < 100
  136.         \special{dt \the\@tempcntb.0\the\@tempcnta}%
  137.     \else
  138.         \special{dt \the\@tempcntb.\the\@tempcnta}%
  139.     \fi\fi
  140.     \ignorespaces
  141. }
  142. %
  143. \def\@iiidashline[#1]#2[#3](#4,#5)(#6,#7){%
  144. \@dashline[#1]{#2\unitlength}[#3](#4,#5)(#6,#7)%
  145. \@iidashline[#1]{#2}[#3](#6,#7)}
  146. %
  147. %% Redefine \@dashline
  148. \long\def\@dashline[#1]#2[#3](#4,#5)(#6,#7){{%
  149. \x@diff=#6\unitlength \advance\x@diff by -#4\unitlength
  150. \y@diff=#7\unitlength \advance\y@diff by -#5\unitlength
  151. %% correction to get actual width since the dash-length as taken in arguement
  152. %% is the center-to-center of the end-points.
  153. \@tempdima=#2\relax \advance\@tempdima -\@wholewidth
  154. \sqrtandstuff{\x@diff}{\y@diff}{\@tempdima}%
  155. \ifnum\num@segments <3 \num@segments=3\fi% min number of dashes I can plot
  156. % is 2, 1 at either end, thus min num@segments is 3 (including 'empty dash').
  157. \@tempdima=\x@diff \@tempdimb=\y@diff
  158. \divide\@tempdimb by\num@segments
  159. \divide\@tempdima by\num@segments
  160. %% ugly if-then-else. If optional dotgap specified, then use it otherwise
  161. %% make a solid dash.
  162. {\ifx#3\@empty \relax
  163.     \ifdim\@tempdima < 0pt \x@diff=-\@tempdima\else\x@diff=\@tempdima\fi
  164.     \ifdim\@tempdimb < 0pt \y@diff=-\@tempdimb\else\y@diff=\@tempdimb\fi
  165.     \global\setbox\@dotbox\hbox{%
  166.                 \@absspdrawline(0pt,0pt)(\@tempdima,\@tempdimb)}%
  167.     \else\global\setbox\@dotbox\hbox{%
  168.         \@spdottedline{#3\unitlength}(0pt,0pt)(\@tempdima,\@tempdimb)}%
  169.     \fi}%
  170. \advance\x@diff by -\@tempdima % both have same sign
  171. \advance\y@diff by -\@tempdimb
  172. %
  173. %%here we correct the number of dashes to be put by reducing them
  174. %%appropriately. (num@segments*\@wholewidth) is in some way the slack we
  175. %%have,and division by dash-length gives the reduction. reduction =
  176. %%(2*num@segments*\@wholewidth)/dash-length
  177. %% (num@segments includes empty ones)
  178. \@tempdima=\num@segments\@wholewidth \@tempdima=2\@tempdima
  179. \@tempcnta\@tempdima\relax \@tempdima=#2\relax \@tempdimb=0.5\@tempdima
  180. \@tempcntb\@tempdimb\relax \advance\@tempcnta by \@tempcntb % round-off error
  181. \divide\@tempcnta by\@tempdima \advance\num@segments by -\@tempcnta
  182. %
  183. \ifnum #1=0 \relax\else\ifnum #1 < -100
  184.   \typeout{***dashline: reduction > -100 percent implies blankness!***}
  185. \else\num@segmentsi=#1 \advance\num@segmentsi by 100
  186.      \multiply\num@segments by\num@segmentsi \divide\num@segments by 100
  187. \fi\fi
  188. %
  189. \divide\num@segments by 2 % earlier num@segments included 'empty dashes' too.
  190. \ifnum\num@segments >0 % if =0 then don't divide => \x@diff & \y@diff
  191.  \divide\x@diff by\num@segments%   remain same.
  192.  \divide\y@diff by\num@segments
  193.  \advance\num@segments by\@ne %for the last segment for which I subtracted
  194.                   %\@tempdima & \@tempdimb from \x@diff & \y@diff
  195.  \else\num@segments=2 % one at each end.
  196. \fi
  197. %%\typeout{num@segments finally = \the\num@segments}
  198. %% equiv to \multiput(#4,#5)(\x@diff,\y@diff){\num@segments}{\copy\@dotbox}
  199. %% with arguements in absolute dimensions.
  200. \@xdim=#4\unitlength \@ydim=#5\unitlength
  201. \@killglue
  202. \loop \ifnum\num@segments > 0
  203. \unskip\raise\@ydim\hbox to\z@{\hskip\@xdim \copy\@dotbox\hss}%
  204. \advance\num@segments \m@ne\advance\@xdim\x@diff\advance\@ydim\y@diff%
  205. \repeat}%
  206. \ignorespaces}
  207. %% redefine \@drawline
  208. %
  209. \def\@drawline[#1](#2,#3)(#4,#5){{%
  210. \@drawitfalse\@horvlinefalse
  211. \ifnum#1 <0 \relax\else\@horvlinetrue\fi
  212. \if@horvline
  213.  \@spdrawline(#2,#3)(#4,#5)
  214. \else\@drawittrue\fi
  215. %%-------------------------------
  216. \if@drawit
  217. \ifnum #1=0 \relax \else\ifnum #1 < -99
  218.   \typeout{***drawline: reduction <= -100 percent implies blankness!***}%
  219. \else\num@segmentsi=#1 \advance\num@segmentsi by 50
  220.      \multiply\num@segmentsi 2
  221. \fi\fi
  222. \@dashline[\num@segmentsi]{10pt}[\@empty](#2,#3)(#4,#5)
  223. \fi}\ignorespaces}% for \if@drawit
  224. %
  225. \def\@spdrawline(#1,#2)(#3,#4){%
  226.    \@absspdrawline(#1\unitlength,#2\unitlength)(#3\unitlength,#4\unitlength)
  227.    \ignorespaces
  228. }
  229. \def\@absspdrawline(#1,#2)(#3,#4){%
  230.     \special{pn \the\@gphlinewidth}%
  231.     \@tempdimc=#1\relax
  232.     \@tempcnta \@tempdimc\relax \advance\@tempcnta 2368 \divide\@tempcnta 4736
  233.     \@tempdimc=#2\relax
  234.     \@tempcntb -\@tempdimc\relax \advance\@tempcntb -2368 \divide\@tempcntb 4736
  235.     \@paspecial{\the\@tempcnta}{\the\@tempcntb}%
  236.     \@tempdimc=#3\relax
  237.     \@tempcnta\@tempdimc\relax \advance\@tempcnta 2368 \divide\@tempcnta 4736
  238.     \@tempdimc=#4\relax
  239.     \@tempcntb -\@tempdimc\relax \advance\@tempcntb -2368 \divide\@tempcntb 4736
  240.     \@paspecial{\the\@tempcnta}{\the\@tempcntb}%
  241.     \special{fp}%
  242.     \ignorespaces
  243. }
  244. %%----------------------------------------------------------------------
  245. \def\@paspecial#1#2{%
  246.     \special{pa #1 #2}%
  247. }
  248. %%
  249. %% Functions below modify the LaTeX commands and some additional commands
  250. %% are not supported by LaTeX nor epic such as ThickLines and arc.
  251. %%
  252. %% The macros are for use with LaTeX picture environment
  253. %% By including the macro file, you can draw
  254. %%   1) \line in any slope
  255. %%   2) \circle with any radius
  256. %%   3) \ellipse with any x-axis and y-axis length
  257. %%   4) Circular \arc by giving starting and ending angle (in radius)
  258. %%
  259. %% Furthermore you may draw lines in any thickness.
  260. %%
  261. %%
  262. %% Redefine \thinlines, \thicklines and define \Thickline
  263. %% See also latex.tex
  264. \def\Thicklines{\let\@linefnt\tenlnw \let\@circlefnt\tencircw
  265.     \@wholewidth\fontdimen8\tenlnw \@wholewidth 1.5\@wholewidth
  266.     \@halfwidth .5\@wholewidth
  267.     \@gphlinewidth\@wholewidth \divide\@gphlinewidth 4736\relax}
  268. %%
  269. %% Generate the \special command for drawing arc
  270. \def\@circlespecial#1#2#3#4{%
  271.           \special{pn \the\@gphlinewidth}%
  272.           \special{ar 0 0 #1 #2 #3 #4}
  273. }
  274. %%
  275. %% Command for drawing an arc. Elliptical arc command can be generated
  276. %% but all iptex program I saw so far does not support that.
  277. \def\@arc#1#2#3#4{%
  278. %% convert TeX dimension to length in terms thousandth of an inch
  279.     \@tempdima #1\unitlength
  280.     \@tempdimb #2\unitlength
  281.         \@tempcnta\@tempdima \advance\@tempcnta 4736 \divide\@tempcnta 9473
  282.     \@tempcntb\@tempdimb \advance\@tempcntb 4736 \divide\@tempcntb 9473
  283.     \setbox\@tempboxa\hbox{%
  284.         \@circlespecial{\the\@tempcnta}{\the\@tempcntb}{#3}{#4}}%
  285.         \wd\@tempboxa\z@ \box\@tempboxa}
  286. %%
  287. %% Command for drawing Circle and Ellipse in terms of \@arc
  288. %% replace original \circle
  289. \def\circle{%
  290.     \@ifstar{\copy\@filltype\@circle}{\@circle}}
  291. \def\@circle#1{\@arc{#1}{#1}{0}{6.2832}}
  292. \def\ellipse{%
  293.     \@ifstar{\copy\@filltype\@ellipse}{\@ellipse}}
  294. \def\@ellipse#1#2{{\@arc{#1}{#2}{0}{6.2832}}}
  295. \def\arc#1#2#3{\@arc{#1}{#1}{#2}{#3}}
  296. %%
  297. %% Generate \special commands for drawing line
  298. \def\@linespecial#1#2{%
  299.           \special{pn \the\@gphlinewidth}%
  300.           \special{pa 0 0}%
  301.           \special{pa #1 #2}%
  302.           \special{fp}%
  303. }
  304. %% Replace original \line. Only change is to call \@ssline instead
  305. %% of \@sline. For description, see latex.tex
  306. \def\line(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax
  307. \@linelen=#3\unitlength
  308. \ifnum\@xarg =0 \@vline 
  309.   \else \ifnum\@yarg =0 \@hline \else \@ssline\fi
  310. \fi}
  311. %%
  312. \def\@ssline{%
  313.     \ifnum\@xarg< 0
  314.       \@negargtrue \@xarg -\@xarg \@tempdima -\@linelen
  315.     \else
  316.       \@negargfalse \@tempdima\@linelen
  317.     \fi
  318. %% truncation is used in arithmetic
  319.     \@tempcnta\@linelen \divide\@tempcnta 4736
  320.         \@yyarg -\@yarg \multiply\@yyarg \@tempcnta \divide\@yyarg\@xarg
  321.      \if@negarg
  322.         \@tempcnta -\@tempcnta
  323.     \fi
  324.     \setbox\@linechar\hbox{\@linespecial{\the\@tempcnta}{\the\@yyarg}}%
  325.     \wd\@linechar\@tempdima
  326.     \@clnht\@linelen
  327.         \multiply\@clnht\@yarg
  328.         \divide\@clnht\@xarg
  329.     \ifnum\@yarg< 0
  330.       \@clnht -\@clnht
  331.       \ht\@linechar\z@ \dp\@linechar\@clnht
  332.     \else
  333.       \ht\@linechar\@clnht \dp\@linechar\z@
  334.     \fi
  335.     \box\@linechar
  336. }
  337. %%
  338. %% Replace original \@sline
  339. \def\@sline{%
  340.     \@ssline
  341. %% Codes below (till end of the command) is only necessary
  342. %% when used with \@svector
  343.     \if@negarg
  344.       \@yyarg -\@yarg
  345.     \else
  346.       \@yyarg \@yarg
  347.     \fi
  348.     \setbox\@linechar\hbox{\@linefnt\@getlinechar(\@xarg,\@yyarg)}%
  349.     \ifnum\@yarg> 0
  350.       \let\@upordown\raise
  351.       \advance\@clnht -\ht\@linechar
  352.     \else
  353.       \let\@upordown\lower
  354.     \fi
  355.     \if@negarg \kern\wd\@linechar \fi
  356. }
  357. %%
  358. \def\spline(#1,#2){%
  359.     \special{pn \the\@gphlinewidth}%
  360.     \@spline(#1,#2)%
  361. }
  362. \def\@spline(#1,#2){%
  363.     \@tempdima #1\unitlength
  364.     \@tempdimb #2\unitlength
  365.     \@tempcnta \@tempdima \advance\@tempcnta 2368 \divide\@tempcnta 4736
  366.     \@tempcntb -\@tempdimb \advance\@tempcntb -2368 \divide\@tempcntb 4736
  367.     \@paspecial{\the\@tempcnta}{\the\@tempcntb}%
  368.     \@ifnextchar ({\@spline}{\special{sp}}%
  369. }
  370. \def\path(#1,#2){%
  371.     \special{pn \the\@gphlinewidth}%
  372.     \@path(#1,#2)%
  373. }
  374. \def\@path(#1,#2){%
  375.     \@tempdima #1\unitlength
  376.     \@tempdimb #2\unitlength
  377.     \@tempcnta \@tempdima \advance\@tempcnta 2368 \divide\@tempcnta 4736
  378.     \@tempcntb -\@tempdimb \advance\@tempcntb -2368 \divide\@tempcntb 4736
  379.     \@paspecial{\the\@tempcnta}{\the\@tempcntb}%
  380.     \@ifnextchar ({\@path}{\special{fp}}%
  381. }
  382.  
  383. %%%%%%%%%% Beginning of \oval %%%%%%%%%%%%%%%
  384. \newdimen\maxovaldiam \maxovaldiam 40pt\relax
  385.  
  386. \def\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen
  387.   \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue
  388.   \@tfor\@tempa :=#3\do{\csname @ov\@tempa false\endcsname}\@ovxx
  389.   #1\unitlength \@ovyy #2\unitlength
  390.   \@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx\else \@ovyy \fi
  391.   \@ovro \ifdim \@tempdimb>\maxovaldiam \maxovaldiam\else\@tempdimb\fi\relax
  392.   \divide \@ovro \tw@
  393.   \@ovdx\@ovxx \divide\@ovdx \tw@
  394.   \@ovdy\@ovyy \divide\@ovdy \tw@
  395.   \setbox\@tempboxa \hbox{%
  396.   \if@ovr \@ovverta\fi
  397.   \if@ovl \kern \@ovxx \@ovvertb\kern -\@ovxx \fi
  398.   \if@ovt \@ovhorz \kern -\@ovxx \fi
  399.   \if@ovb \raise \@ovyy \@ovhorz \fi}
  400.   \ht\@tempboxa\z@ \dp\@tempboxa\z@
  401.   \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}%
  402.   \endgroup}
  403.  
  404. \def\@qcirc#1#2#3#4{%
  405.     \special{pn \the\@gphlinewidth}%
  406.     \@eepictcnt \@gphlinewidth \divide\@eepictcnt 2
  407.     \@tempcnta #1 
  408.       \advance\@tempcnta 2368 \divide\@tempcnta 4736
  409.       \advance\@tempcnta\@eepictcnt
  410.     \@tempcntb #2 \divide\@tempcntb 4736 \advance\@tempcntb 2
  411.     \hbox{%
  412.         \@qcircspecial{\the\@tempcnta}{-\the\@eepictcnt}{\the\@tempcntb}{#3}{#4}}%
  413. }
  414. \def\@qcircspecial#1#2#3#4#5{\special{ar #1 #2 #3 #3 #4 #5}}
  415.  
  416. \def\@ovverta{\vbox to \@ovyy{%
  417.     \if@ovb
  418.         \kern \@ovro
  419.         \@qcirc{\@ovro}{\@ovro}{3.1416}{4.7124}\nointerlineskip
  420.     \else
  421.         \kern \@ovdy
  422.     \fi
  423.     \leaders\vrule width \@wholewidth\vfil \nointerlineskip
  424.     \if@ovt
  425.         \@qcirc{\@ovro}{\@ovro}{1.5708}{3.1416}\nointerlineskip
  426.         \kern \@ovro
  427.     \else
  428.         \kern \@ovdy
  429.     \fi
  430. }\kern -\@wholewidth}
  431.  
  432. \def\@ovvertb{\vbox to \@ovyy{%
  433.     \if@ovb
  434.         \kern \@ovro
  435.         \@qcirc{-\@ovro}{\@ovro}{4.6124}{6.2832}\nointerlineskip
  436.     \else
  437.         \kern \@ovdy
  438.     \fi
  439.     \leaders\vrule width \@wholewidth\vfil \nointerlineskip
  440.     \if@ovt
  441.         \@qcirc{-\@ovro}{\@ovro}{0}{1.6708}\nointerlineskip
  442.         \kern \@ovro
  443.     \else
  444.         \kern \@ovdy
  445.     \fi
  446. }\kern -\@wholewidth}
  447.  
  448. \def\@ovhorz{\hbox to \@ovxx{%
  449.     \if@ovr \kern \@ovro\else \kern \@ovdx \fi
  450.     \leaders \hrule height \@wholewidth \hfil
  451.     \if@ovl \kern \@ovro\else \kern \@ovdx \fi
  452.     }}
  453. %%%%%%%%% End of \oval %%%%%%%%%%%%%%
  454.  
  455. \def\allinethickness#1{\let\@linefnt\tenlnw \let\@circlefnt\tencircw
  456.     \@wholewidth #1 \@halfwidth .5\@wholewidth
  457.     \@gphlinewidth\@wholewidth \divide\@gphlinewidth 4736\relax}
  458.  
  459. \def\blacken{\special{bk}}
  460. \def\whiten{\special{wh}}
  461. \def\shade{\special{sh}}
  462. \def\texture#1{\special{tx #1}\ignorespaces}
  463. %% 
  464. \newbox\@filltype
  465. \setbox\@filltype\hbox{\special{bk}}
  466. \def\filltype#1{\@nameuse{ft@#1}}
  467. \def\ft@black{\setbox\@filltype\hbox{\special{bk}}}
  468. \def\ft@white{\setbox\@filltype\hbox{\special{wh}}}
  469. \def\ft@shade{\setbox\@filltype\hbox{\special{sh}}}
  470. %%
  471. \makeatother
  472.